using System.Collections;

namespace Anvil.Core
{
	/// <summary>
	/// A {@link Context} represents the state information that is
	/// accessed and manipulated by the execution of a {@link ICommand} or a
	/// {@link IChain}.  
	/// </summary>
	/// <remarks>
	/// <p>Specialized implementations of {@link IContext} may
	/// add properties that contain typesafe accessors to information that 
	/// is relevant to a particular use case for this context, and/or add 
	/// operations that affect the state information that is saved in the 
	/// context.</p>
	/// 
	/// <p>Implementations of {@link IContext} must also implement all of the
	/// required and optional contracts of the <code>IDictionary</code>
	/// interface.</p>
	///
	/// <p>To protect applications from evolution of this interface, specialized
	/// implementations of {@link Context} should generally be created by extending
	/// the provided base class ({@link Anvil.Core.Context})
	/// rather than directly implementing this interface.</p>
	///
	/// <p>Applications should <strong>NOT</strong> assume that
	/// {@link Context} implementations, or the values stored in its
	/// attributes, may be accessed from multiple threads
	/// simultaneously, unless this is explicitly documented for a particular
	/// implementation.</p>
	/// </remarks>
	public interface IContext : IDictionary
	{
	}
}